/*
 * @Author: anonymous
 * @Date: 2022-01-24 01:01:10
 * @LastEditors: anonymous
 * @LastEditTime: 2022-05-14 22:28:53
 * @Description: 
 */
import axios from 'axios'
import router from './router'
import { clearLoginInfo } from './public'
import { ElMessage } from 'element-plus'

// 基础配置
axios.defaults.baseURL = 'http://localhost:8080'
axios.defaults.timeout = 15000
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'

// 请求拦截
axios.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么
    const loginType = localStorage.getItem("currentLoginType") || 'user';
    const satoken = localStorage.getItem(`satoken_${loginType}`);
    
    config.headers.satoken = satoken;
    // 添加登录类型到请求头，便于后端识别用户类型
    config.headers.loginType = loginType;
    
    // 打印请求信息，帮助调试
    console.log('发送请求:', {
      url: config.url,
      method: config.method,
      headers: config.headers,
      data: config.data
    });
    
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 添加响应拦截器
axios.interceptors.response.use(function(response) {
  // 2xx 范围内的状态码都会触发该函数
  // 对响应数据做点什么
  if (response.data.code == 43008) {
    ElMessage.warning({
      message: response.data.msg,
      showClose: true
    });
    if (router.currentRoute.name != 'AccountLogin') { router.push({ name: 'AccountLogin' }) }
    clearLoginInfo();
  }

  if (response.data.code === 43003) {
    ElMessage.warning({
      message: response.data.msg,
      showClose: true
    });
    router.go(-1)
  }
  return response;
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数
  // 对响应错误做点什么
  console.error('请求发生错误:', error);
  
  if (error.response) {
    // 请求已发出，但服务器响应状态码不在 2xx 范围内
    console.error('错误状态码:', error.response.status);
    console.error('错误数据:', error.response.data);
    
    if (error.response.status === 500) {
      ElMessage.error({
        message: '服务器内部错误，请联系管理员',
        showClose: true
      });
    } else if (error.response.status === 401) {
      ElMessage.error({
        message: '未授权，请重新登录',
        showClose: true
      });
      if (router.currentRoute.name !== 'AccountLogin') {
        router.push({ name: 'AccountLogin' });
        clearLoginInfo();
      }
    } else {
      ElMessage.error({
        message: `请求失败 (${error.response.status}): ${error.message}`,
        showClose: true
      });
    }
  } else if (error.request) {
    // 请求已发出，但没有收到响应
    console.error('请求发出但无响应:', error.request);
    ElMessage.error({
      message: '网络异常，服务器未响应',
      showClose: true
    });
  } else {
    // 请求设置有问题
    console.error('请求设置错误:', error.message);
    ElMessage.error({
      message: `请求错误: ${error.message}`,
      showClose: true
    });
  }
  
  return Promise.reject(error);
});

export default axios
